import React from 'react';
import { get, set } from 'lodash-es';
import { TypeStore, TypeSetStore } from './index';

export const exaction = {
  //yellow     'yellowData.0.0'
  yellowBlue: {
    use: false,
    check: (store: TypeStore) => {
      return (
        get(store, 'yellowData.0.0.1') &&
        get(store, 'yellowData.0.1.1') &&
        get(store, 'yellowData.0.2.1')
      );
    },
    set: (store: TypeStore) => {
      store.exaction.yellowBlue.use = true;
      store.exactions = [
        ...store.exactions,
        {
          type: 'blue',
          value: 'any',
        },
      ];
    },
  },
  yellowOrange: {
    use: false,
    check: (store: TypeStore) => {
      return (
        get(store, 'yellowData.1.0.1') &&
        get(store, 'yellowData.1.1.1') &&
        get(store, 'yellowData.1.3.1')
      );
    },
    set: (store: TypeStore) => {
      const item = store.orangeData.find(i => !i[1]) || {};
      set(item, [1], 4);
      store.exaction.yellowOrange.use = true;
    },
  },
  yellowGreen: {
    use: false,
    check: (store: TypeStore) => {
      return (
        get(store, 'yellowData.2.0.1') &&
        get(store, 'yellowData.2.2.1') &&
        get(store, 'yellowData.2.3.1')
      );
    },
    set: (store: TypeStore) => {
      const item = store.greenData.find(i => !i[1]) || {};
      set(item, [1], 1);
      store.exaction.yellowGreen.use = true;
    },
  },
  yellowAdd1: {
    use: false,
    check: (store: TypeStore) => {
      return (
        get(store, 'yellowData.0.0.1') &&
        get(store, 'yellowData.1.1.1') &&
        get(store, 'yellowData.2.2.1') &&
        get(store, 'yellowData.3.3.1')
      );
    },
    set: (store: TypeStore) => {
      store.add1 = store.add1 + 1;
      store.exaction.yellowAdd1.use = true;
    },
  },
  // yellowFox: {
  //   check: (store: TypeStore) => {
  //     return get(store, 'yellowData.2.0')
  //     && get(store, 'yellowData.2.2')
  //     && get(store, 'yellowData.2.3')
  //   }
  // }

  //blue
  blueOrange: {
    use: false,
    check: (store: TypeStore) => {
      return (
        get(store, 'blueData.0.1.1') &&
        get(store, 'blueData.0.2.1') &&
        get(store, 'blueData.0.3.1')
      );
    },
    set: (store: TypeStore) => {
      const item = store.orangeData.find(i => !i[1]) || {};
      set(item, [1], 5);
      store.exaction.blueOrange.use = true;
    },
  },
  blueYellow: {
    use: false,
    check: (store: TypeStore) => {
      return (
        get(store, 'blueData.1.0.1') &&
        get(store, 'blueData.1.1.1') &&
        get(store, 'blueData.1.2.1') &&
        get(store, 'blueData.1.3.1')
      );
    },
    set: (store: TypeStore) => {
      store.exaction.blueYellow.use = true;
      store.exactions = [
        ...store.exactions,
        {
          type: 'yellow',
          value: 'any',
        },
      ];
    },
  },
  blueReroll: {
    use: false,
    check: (store: TypeStore) => {
      return (
        get(store, 'blueData.0.0.1') &&
        get(store, 'blueData.1.0.1') &&
        get(store, 'blueData.2.0.1')
      );
    },
    set: (store: TypeStore) => {
      store.reRoll = store.reRoll + 1;
      store.exaction.blueReroll.use = true;
    },
  },
  blueGreen: {
    use: false,
    check: (store: TypeStore) => {
      return (
        get(store, 'blueData.0.1.1') &&
        get(store, 'blueData.1.1.1') &&
        get(store, 'blueData.2.1.1')
      );
    },
    set: (store: TypeStore) => {
      store.exaction.blueGreen.use = true;
      const item = store.greenData.find(i => !i[1]) || {};
      set(item, [1], 1);
    },
  },
  bluePurple: {
    use: false,
    check: (store: TypeStore) => {
      return (
        get(store, 'blueData.0.2.1') &&
        get(store, 'blueData.1.2.1') &&
        get(store, 'blueData.2.2.1')
      );
    },
    set: (store: TypeStore) => {
      store.exaction.bluePurple.use = true;
      const item = store.purpleData.find(i => !i[1]) || {};
      set(item, [1], 6);
    },
  },
  blueAdd1: {
    use: false,
    check: (store: TypeStore) => {
      return (
        get(store, 'blueData.0.3.1') &&
        get(store, 'blueData.1.3.1') &&
        get(store, 'blueData.2.3.1')
      );
    },
    set: (store: TypeStore) => {
      store.add1 = store.add1 + 1;
      store.exaction.blueAdd1.use = true;
    },
  },
  // green
  greenAdd1: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'greenData.3.1');
    },
    set: (store: TypeStore) => {
      store.add1 = store.add1 + 1;
      store.exaction.greenAdd1.use = true;
    },
  },
  greenBlue: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'greenData.5.1');
    },
    set: (store: TypeStore) => {
      store.exaction.greenBlue.use = true;
      store.exactions = [
        ...store.exactions,
        {
          type: 'blue',
          value: 'any',
        },
      ];
    },
  },
  greenPurple: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'greenData.8.1');
    },
    set: (store: TypeStore) => {
      store.exaction.greenPurple.use = true;
      const item = store.purpleData.find(i => !i[1]) || {};
      set(item, [1], 6);
    },
  },
  greenReroll: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'greenData.9.1');
    },
    set: (store: TypeStore) => {
      store.exaction.greenReroll.use = true;
      store.reRoll = store.reRoll + 1;
    },
  },

  //orange
  orangeReroll: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'orangeData.2.1');
    },
    set: (store: TypeStore) => {
      store.exaction.orangeReroll.use = true;
      store.reRoll = store.reRoll + 1;
    },
  },
  orangeYellow: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'orangeData.4.1');
    },
    set: (store: TypeStore) => {
      store.exaction.orangeYellow.use = true;
      store.exactions = [
        ...store.exactions,
        {
          type: 'yellow',
          value: 'any',
        },
      ];
    },
  },
  orangeAdd1: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'orangeData.5.1');
    },
    set: (store: TypeStore) => {
      store.exaction.orangeAdd1.use = true;
      store.add1 = store.add1 + 1;
    },
  },
  orangePurple: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'orangeData.9.1');
    },
    set: (store: TypeStore) => {
      store.exaction.orangePurple.use = true;
      const item = store.purpleData.find(i => !i[1]) || {};
      set(item, [1], 6);
    },
  },

  //pruple
  purpleReroll: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'purpleData.2.1');
    },
    set: (store: TypeStore) => {
      store.exaction.purpleReroll.use = true;
      store.reRoll = store.reRoll + 1;
    },
  },
  purpleBlue: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'purpleData.3.1');
    },
    set: (store: TypeStore) => {
      store.exaction.purpleBlue.use = true;
      store.exactions = [
        ...store.exactions,
        {
          type: 'blue',
          value: 'any',
        },
      ];
    },
  },
  purpleAdd1: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'purpleData.4.1');
    },
    set: (store: TypeStore) => {
      store.exaction.purpleAdd1.use = true;
      store.add1 = store.add1 + 1;
    },
  },
  purpleYellow: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'purpleData.5.1');
    },
    set: (store: TypeStore) => {
      store.exaction.purpleYellow.use = true;
      store.exactions = [
        ...store.exactions,
        {
          type: 'yellow',
          value: 'any',
        },
      ];
    },
  },
  purpleReroll2: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'purpleData.7.1');
    },
    set: (store: TypeStore) => {
      store.exaction.purpleReroll2.use = true;
      store.reRoll = store.reRoll + 1;
    },
  },
  purpleGreen: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'purpleData.8.1');
    },
    set: (store: TypeStore) => {
      store.exaction.purpleGreen.use = true;
      const item = store.greenData.find(i => !i[1]) || {};
      set(item, [1], 1);
    },
  },
  purpleOrange: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'purpleData.9.1');
    },
    set: (store: TypeStore) => {
      store.exaction.purpleOrange.use = true;
      const item = store.orangeData.find(i => !i[1]) || {};
      set(item, [1], 6);
    },
  },
  purpleAdd12: {
    use: false,
    check: (store: TypeStore) => {
      return !!get(store, 'purpleData.10.1');
    },
    set: (store: TypeStore) => {
      store.exaction.purpleAdd12.use = true;
      store.add1 = store.add1 + 1;
    },
  },
};
